package bz.ziro.kanbe.logic;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;

import org.slim3.datastore.Datastore;

import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.Transaction;

import bz.ziro.kanbe.meta.PageMeta;
import bz.ziro.kanbe.meta.SiteMeta;
import bz.ziro.kanbe.meta.TemplateBrowserMeta;
import bz.ziro.kanbe.meta.TemplateMeta;
import bz.ziro.kanbe.meta.UserAgentMeta;
import bz.ziro.kanbe.model.Page;
import bz.ziro.kanbe.model.Site;
import bz.ziro.kanbe.model.Template;
import bz.ziro.kanbe.model.TemplateBrowser;
import bz.ziro.kanbe.model.UserAgent;

/**
 * 初回データ作成ロジック
 * @author Administrator
 */
public class FirstLogic {

    @SuppressWarnings("unused")
    private static final Logger logger = Logger.getLogger(FirstLogic.class.getName());

    /**
     * 初回起動時に呼び出す
     */
    public static void insertFirstSiteData() {
        //サイトを確認
        int count = Datastore.query("Site").count();
        if ( count > 0 ) {
            return;
        }

        UserAgentMeta userAgentMeta = new UserAgentMeta();

        //エージェントを追加
        UserAgent userAgent = new UserAgent();
        Key agentKey = Datastore.allocateId(userAgentMeta);
        userAgent.setKey(agentKey);
        userAgent.setName("デフォルト");
        userAgent.setDetail("デフォルトで選ばれるエージェントです。携帯などを使用しない限り他の必要はないかと。");

        userAgent.setPriority(1);
        Transaction tx = Datastore.beginTransaction();
        Datastore.put(tx,userAgent);
        tx.commit();

        SiteMeta siteMeta = new SiteMeta();
        Site site = new Site();
        //サイトのキーを生成
        Key siteKey = Datastore.allocateId(siteMeta);
        site.setKey(siteKey);
        site.setName("デフォルトサイト");
        site.setDetail("最初に登録されるサイトです");
        site.setCreateDate(new Date());
        //現在の日付を設定
        site.setPublishDate(new Date());

        List<Object> models = new ArrayList<Object>();
        models.add(site);
        //頁のデータを作成
        insertFirstPageData(site,userAgent,models);

        tx = Datastore.beginTransaction();
        Datastore.put(tx,models);
        tx.commit();
    }

    /**
     * サイトを追加した場合に呼び出す
     * @param tx
     * @param models
     */
    public static void insertFirstPageData(Site site,UserAgent agent,List<Object> models) {

        TemplateMeta templateMeta = new TemplateMeta();
        TemplateBrowserMeta browserMeta = new TemplateBrowserMeta();
        PageMeta pageMeta = new PageMeta();

        Key siteKey = site.getKey();
        //サイトのキーを生成
        Key siteTemplateKey = Datastore.allocateId(siteKey,templateMeta);
        Key pageTemplateKey = Datastore.allocateId(siteKey,templateMeta);

        //テンプレートを追加
        Template siteTemplate = new Template();
        siteTemplate.setKey(siteTemplateKey);
        siteTemplate.setName("サイトテンプレート");
        siteTemplate.setSiteKey(siteKey);
        siteTemplate.setCreateDate(new Date());

        Template pageTemplate = new Template();
        pageTemplate.setKey(pageTemplateKey);
        pageTemplate.setName("ページテンプレート");
        pageTemplate.setSiteKey(siteKey);
        pageTemplate.setCreateDate(new Date());

        models.add(siteTemplate);
        models.add(pageTemplate);

        TemplateBrowser siteBrowser = new TemplateBrowser();
        TemplateBrowser pageBrowser = new TemplateBrowser();

        //サイトのキーを生成
        Key siteBrowserKey = Datastore.allocateId(siteTemplateKey,browserMeta);
        Key pageBrowserKey = Datastore.allocateId(pageTemplateKey,browserMeta);

        siteBrowser.setKey(siteBrowserKey);
        siteBrowser.setAgentKey(agent.getKey());
        siteBrowser.setTemplateKey(siteTemplateKey);
        siteBrowser.setTemplateData(
         "<html>\n"  +
         "<head>\n"  +
         "<title> $site.name </title>\n"  +
         "</head>\n"  +
         "<body>\n"  +
         "${pageTemplate}\n"  +
         "</body>\n"  +
         "</html>\n"
        );
        siteBrowser.setCreateDate(new Date());

        pageBrowser.setKey(pageBrowserKey);
        pageBrowser.setAgentKey(agent.getKey());
        pageBrowser.setTemplateKey(pageTemplateKey);
        pageBrowser.setTemplateData(
            "$page.name<br>\n"  +
            "$page.detail\n"
        );
        pageBrowser.setCreateDate(new Date());

        models.add(siteBrowser);
        models.add(pageBrowser);

        //ページを追加
        Page page = new Page();
        page.setName("官兵衛構築サイト");
        page.setDetail("官兵衛をご利用いただきありがとうございます。");

        Key pageKey = Datastore.allocateId(site.getKey(),pageMeta);

        page.setKey(pageKey);
        page.setSiteKey(site.getKey());
        page.setSiteTemplateKey(siteTemplate.getKey());
        page.setPageTemplateKey(pageTemplate.getKey());
        page.setCreateDate(new Date());

        models.add(page);
    }
}
